package com.yisu.springboot.config;

import com.yisu.springboot.listener.RedisMessageListener;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.listener.ChannelTopic;
import org.springframework.data.redis.listener.RedisMessageListenerContainer;
import org.springframework.data.redis.listener.adapter.MessageListenerAdapter;

/**
 * @description:
 * @author: xuyisu
 * @date: 2024-08-27
 */
@Configuration
public class RedisConfig {

    //在RedisConfig类中，我使用了MessageListenerAdapter来包装我们的RedisMessageListener。
    // 这是因为RedisMessageListener直接实现了MessageListener接口，但如果你使用的是Spring的@MessageMapping注解来定义消息处理方法，
    // 你可能需要直接注入RedisMessageListener实例到container中，而不是通过MessageListenerAdapter。

    @Bean
    RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory,
                                            MessageListenerAdapter listenerAdapter) {

        RedisMessageListenerContainer container = new RedisMessageListenerContainer();
        container.setConnectionFactory(connectionFactory);
        container.addMessageListener(listenerAdapter, new ChannelTopic("myChannel"));

        return container;
    }

    @Bean
    MessageListenerAdapter listenerAdapter(RedisMessageListener redisMessageListener) {
        return new MessageListenerAdapter(redisMessageListener);
    }

    // 假设RedisMessageListener是你的监听器类名，根据实际情况替换
    // 如果监听器已经是一个MessageListener的实现，则可以直接注入到container中
}
